package leetcode;


/**
 * 二叉搜索树
 * 中序遍历的结果：升序的
 */
public class l0098_验证二叉搜索树_指定范围去遍历_中序_前序_后序 {

    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, null, null);
    }

    /**
     * 采用前序遍历 中序遍历 后序遍历都可以
     * 此处采用前序遍历
     */
    public boolean isValidBST(TreeNode node, Integer min, Integer max) {
        if (node == null) {
            return true;
        }
        if (min != null && node.val <= min) {
            return false;
        }
        if (max != null && node.val >= max) {
            return false;
        }
        if (!isValidBST(node.left, min, node.val)) {
            return false;
        }
        if (!isValidBST(node.right, node.val, max)) {
            return false;
        }
        return true;
    }
}
